#include "wx/wxprec.h"

IMPLEMENT_DYNAMIC_CLASS( wxPanel, wxWindow )

BEGIN_EVENT_TABLE( wxPanel, wxWindow )
  EVT_SIZE( wxPanel::OnSize )

  WX_EVENT_TABLE_CONTROL_CONTAINER( wxPanel )
END_EVENT_TABLE()

WX_DELEGATE_TO_CONTROL_CONTAINER( wxPanel, wxWindow )

void wxPanel::Init() {
  m_container.SetContainerWindow( this );
}

bool wxPanel::Create( wxWindow *parent, wxWindowID id,
                      const wxPoint& pos,
                      const wxSize& size,
                      long style,
                      const wxString& name ) {
  if( !wxWindow::Create( parent, id, pos, size, style, name ) ) {
    return false;
  }
  // so that non-solid background renders correctly under GTK+:
  SetThemeEnabled( true );
  #if defined(__WXWINCE__) && (defined(__POCKETPC__) || defined(__SMARTPHONE__))
  // Required to get solid control backgrounds under WinCE
  SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
  #endif
  return true;
}

wxPanel::~wxPanel() {
}

void wxPanel::InitDialog() {
  wxInitDialogEvent event( GetId() );
  event.SetEventObject( this );
  GetEventHandler()->ProcessEvent( event );
}

// ----------------------------------------------------------------------------
// event handlers
// ----------------------------------------------------------------------------

void wxPanel::OnSize( wxSizeEvent& event ) {
  if( GetAutoLayout() ) {
    Layout();
  }
  #if wxUSE_CONSTRAINTS
  #if defined(__WXPM__) && 0
  else {
    // Need to properly move child windows under OS/2
    PSWP                        pWinSwp = GetSwp();
    if( pWinSwp->cx == 0 && pWinSwp->cy == 0 && pWinSwp->fl == 0 ) {
      // Uninitialized
      ::WinQueryWindowPos( GetHWND(), pWinSwp );
    } else {
      SWP                     vSwp;
      int                     nYDiff;
      ::WinQueryWindowPos( GetHWND(), &vSwp );
      nYDiff = pWinSwp->cy - vSwp.cy;
      MoveChildren( nYDiff );
      pWinSwp->cx = vSwp.cx;
      pWinSwp->cy = vSwp.cy;
    }
  }
  #endif
  #endif // wxUSE_CONSTRAINTS
  event.Skip();
}
